/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package crawler;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

/**
 *
 * @author pablo
 */
public class Hilo implements Runnable{

    
    private String sitioWeb;
    private String protocolo;
    String direccionOriginal= "www.jps.go.cr"; ///tener cuidado con esto, hay que buscar una clase para capturarla y enviarla hasta aqui
    
    
    
    public Hilo (){
    
    }
    
    public Hilo(String direccion){
    sitioWeb = direccion;
    protocolo = "http://"; 
    
    }

    
    
    
    
    
    
    
    
    
    String NuevoURL;
    //valida el URL para que no provoque errores al momento de descargar el contenido
    public void ValidarURL(){
        
    String str=sitioWeb;
    boolean pos=str.startsWith("http://");    
    if (pos == false){
        System.out.println("El URL es: "+sitioWeb);
        
        NuevoURL = protocolo.concat(direccionOriginal).concat(sitioWeb);
        System.out.println("La nueva direccion para utilizar sera: "+NuevoURL);
        
        /////////////aca voy a obtener el nombre del archivo que se va a descargar    
        
    }else{
    NuevoURL= str;
    }
    
    ObtenerDirectorios(NuevoURL);
    
    }
    
    @Override
    public void run() {
        ValidarURL();
        
        
    }
    
    
//    public static void main(String [] arg) {
//    
//    Hilo hil = new Hilo("#harev/");
//    hil.ValidarURL();
//    }
    
    
    
    
      public static void ObtenerDirectorios(String string) {
     //   String string = "http://www.cisco.com/en/us/index.html";
        String[] arrayEnlace = string.split("//");
        String enlace = arrayEnlace[1];
        System.out.println(enlace);
        
        /////////////////inicia capturar nombre////////////////
         String reverse = new StringBuffer(enlace).reverse().toString();
         System.out.println("\nString before reverse: "+ enlace);
         System.out.println("String after reverse: "+ reverse);
                String[] arrayNombre = reverse.split("/");
                
                String[] arrayDirectorios = enlace.split("/");
                
                // En este momento tenemos un array en el que cada elemento es un color.
       // for (int i = 0; i < arrayDirectorios.length; i++) {
            // String nombre = new StringBuffer(arrayEnlace[0]).reverse().toString();
            String nombre = new StringBuffer(arrayNombre[0]).reverse().toString();
            System.out.println(nombre);
//            String doubleReverse = new StringBuffer(nombre).reverse().toString();
//            System.out.println("String after double reverse: "+doubleReverse);
    //    }
            
                 
            String dir1 = "";
            String dir2 = "";
        for (int i = 0; i < arrayDirectorios.length -1; i++) {
            
            dir2 = dir1.concat(arrayDirectorios[i]+"/");
            dir1 = dir2;
            
        }
          System.out.println("dir: "+dir1);
            ///////////////finaliza capturar nombre//////////////////////
            
         
            
        crearDirectorio(dir2+"/");
        descargar(string,dir2+"/",nombre);
    }
      
      public static void descargar(String direccion, String ubicacion, String nombreArchivo) {
		
            try {
			// Url con
			URL url = new URL(direccion);

			// establecemos conexion
			URLConnection urlCon = url.openConnection();
                       
                        
			// Sacamos por pantalla el tipo de fichero
                        
                        System.out.println(urlCon.getContentType());
                        
                        
			// Se obtiene el inputStream de la foto web y se abre el fichero
			// local.
			InputStream is = urlCon.getInputStream();
                        
			FileOutputStream fos = new FileOutputStream("C:/paginas/"+ubicacion+nombreArchivo);

			// Lectura de la foto de la web y escritura en fichero local
			byte[] array = new byte[1500]; // buffer temporal de lectura.
			int leido = is.read(array);
			while (leido > 0) {
				fos.write(array, 0, leido);
				leido = is.read(array);
                                System.out.println("Descargando...");
			}

			// cierre de conexion y fichero.
			is.close();
			fos.close();
                        System.out.println("ha finalizado la descarga");
                                                
                       
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
            
            
            
            }
            	}
    

    public static void crearDirectorio(String directorios) {
        
        
            
            File directorio = new File("C:/paginas/"+directorios);//Indica la ubicacion del directorio
            if (directorio.exists()){
                System.out.println("El directorio ya existe...");
            }else{
            directorio.mkdirs(); // Crea el directorio
            }
            

        

    }
    
  /*  public static void capturarNombreArchivo(String linea){
    
        
                
                String reverse = new StringBuffer(linea).reverse().toString();
		System.out.println("\nString before reverse: "+ linea);
		System.out.println("String after reverse: "+ reverse);
                
                String[] arrayDirectorios = reverse.split("/");
                
                // En este momento tenemos un array en el que cada elemento es un color.
       // for (int i = 0; i < arrayDirectorios.length; i++) {
            // String nombre = new StringBuffer(arrayEnlace[0]).reverse().toString();
            String nombre = new StringBuffer(arrayDirectorios[0]).toString();
            System.out.println(nombre);
            String doubleReverse = new StringBuffer(nombre).reverse().toString();
            System.out.println("String after double reverse: "+doubleReverse);
    //    }
            
            
                
                
                
                
                
                
                 


//        for (int i = 0; i < arrayDirectorios.length; i++) {
//            String nombreDirectorio = new StringBuffer(arrayDirectorios[i]).toString();
//
//        }
    }*/
    
    
    
    
    public static void main (String[] arg ){
    Hilo k = new Hilo("http://www.jps.go.cr/Listasnew.htm");
    k.ValidarURL();
    }
}
